package com.dkd.manage.mapper;

import java.util.List;
import java.util.Map;

import com.dkd.manage.domain.EmpPerformanceQuery;
import com.dkd.manage.domain.Task;
import com.dkd.manage.domain.vo.EmpPerformanceVo;
import com.dkd.manage.domain.vo.TaskVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Select;

/**
 * 工单Mapper接口
 * 
 * @author 赵昊鹏
 * @date 2024-10-14
 */
public interface TaskMapper 
{
    /**
     * 查询工单
     * 
     * @param taskId 工单主键
     * @return 工单
     */
    public Task selectTaskByTaskId(Long taskId);

    /**
     * 查询工单列表
     * 
     * @param task 工单
     * @return 工单集合
     */
    public List<Task> selectTaskList(Task task);

    /**
     * 新增工单
     * 
     * @param task 工单
     * @return 结果
     */
    public int insertTask(Task task);

    /**
     * 修改工单
     * 
     * @param task 工单
     * @return 结果
     */
    public int updateTask(Task task);

    /**
     * 删除工单
     * 
     * @param taskId 工单主键
     * @return 结果
     */
    public int deleteTaskByTaskId(Long taskId);

    /**
     * 批量删除工单
     * 
     * @param taskIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTaskByTaskIds(Long[] taskIds);

    /**
     * 查询工单列表
     * @param task
     * @return TaskVo集合
     */
    public List<TaskVo> selectTaskVoList(Task task);

    /**
     * 根据执行人id查询工单列表
     * @param
     * @return
     */
    public List<TaskVo> selectTaskVoListByUserId(Task task);

    /**
     * 根据工单类型分组进行工单统计
     * @param
     * @return
     */
    @Select("SELECT COUNT(*) AS total_tasks, task_status, COUNT(*) AS type_count " +
            "FROM tb_task " +
            "GROUP BY task_status " )
    @MapKey("task_status") // 指定 Map 的键
    List<Map<String, Object>> getTaskStatistics();


    List<EmpPerformanceVo> selectEmpPerformanceList(EmpPerformanceQuery empPerformanceQuery);
}
